/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wf3.core.dao;

import acceso.hibernate.AQuery;
import acceso.util.Escritor;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.StatelessSession;
import wf.dto.BottonDto;
import wf.dto.ComboDto;
import wf.dto.PagparDto;
import wf.dto.PbpungeoDTO;
import wf.dto.RegistroDto;
import wf.dto.TituloDto;
import wf.dto.Valpage;
import wf.dto.Valpagg;
import wf.dto.ValregDto;
import wf.dto.geo.ConcapDto;
import wf.dto.geo.EntgeoDto;
import wf.dto.geo.ValentDto;

/**
 *
 * @author romulogalindo
 * @version 1.0 -2014-04-12
 */
public class PageDAO extends DAO {

    StatelessSession session;
    AQuery query;
    int idsession = 0;

    public PageDAO(int idsession) {
        this.session = acceso.hibernate.AccesoHibernate.getSessionFactory().openStatelessSession();
        this.idsession = idsession;
        query = new AQuery(this.idsession);
        idDAO = idsession;
        time = System.currentTimeMillis();
    }

    /**
     *
     * @param p_co_conten
     * @param p_co_pagina
     * @param p_id_frawor
     * @param p_il_autinc
     * @param p_nu_offset
     * @return
     */
    public List<ValregDto> getValpag(int p_co_conten, int p_co_pagina, int p_id_frawor, boolean p_il_autinc, short p_nu_offset) throws HibernateException {
        if (!p_il_autinc) {
            query.setMquery(session.getNamedQuery("frawor2.pfvalpag"));
            query.setInteger("p_co_pagina", p_co_pagina);
            query.setInteger("p_co_conten", p_co_conten);
            query.setInteger("p_id_frawor", p_id_frawor);
        } else {
            query.setMquery(session.getNamedQuery("frawor2.pfvalpag_autinc"));
            query.setInteger("p_co_pagina", p_co_pagina);
            query.setInteger("p_co_conten", p_co_conten);
            query.setInteger("p_id_frawor", p_id_frawor);
            query.setShort("p_nu_offset", p_nu_offset);
        }
        return query.list();
    }

    /**
     *
     * @param p_co_conten int
     * @param p_co_pagina int
     * @param p_id_frawor int
     */
    public String getValpage(int p_co_conten, int p_co_pagina, int p_id_frawor) {
        query.setMquery(session.getNamedQuery("frawor2.pfvalpage"));
        query.setInteger("p_co_pagina", p_co_pagina);
        query.setInteger("p_co_conten", p_co_conten);
        query.setInteger("p_id_frawor", p_id_frawor);
        return ((Valpage) query.uniqueResult()).getPfvalpage();
    }

    /**
     * @param p_co_conten
     * @param p_co_pagina
     * @param p_id_frawor
     * @return
     */
    public List<TituloDto> getPagtit(int p_co_conten, int p_co_pagina, int p_id_frawor) throws HibernateException {
        query.setMquery(session.getNamedQuery("frawor2.pfpagtit"));
        query.setInteger("p_co_pagina", p_co_pagina);
        query.setInteger("p_id_frawor", p_id_frawor);
        query.setInteger("p_co_conten", p_co_conten);
        return query.list();
    }

    /**
     * @param p_co_conten
     * @param p_co_pagina
     * @param p_id_frawor
     * @return
     */
    public List<RegistroDto> getPagreg(int p_co_conten, int p_co_pagina, int p_id_frawor) throws HibernateException {
        query.setMquery(session.getNamedQuery("frawor2.pfpagreg"));
        query.setInteger("p_co_pagina", p_co_pagina);
        query.setInteger("p_id_frawor", p_id_frawor);
        query.setInteger("p_co_conten", p_co_conten);
        return query.list();
    }

    /**
     * @param p_co_conten
     * @param p_co_pagina
     * @param p_id_frawor
     * @return
     */
    public List<BottonDto> getPagbot(int p_id_frawor, int p_co_conten, int p_co_pagina) throws HibernateException {
        query.setMquery(session.getNamedQuery("frawor2.pfpagbot"));
        query.setInteger("p_co_conten", p_co_conten);
        query.setInteger("p_co_pagina", p_co_pagina);
        query.setInteger("p_id_frawor", p_id_frawor);

        return query.list();
    }

    /**
     * @param p_co_conten
     * @param p_co_pagina
     * @param p_co_pagbot
     * @return
     */
    public List<PagparDto> getPagpar(int p_co_conten, int p_co_pagina, short p_co_pagbot) throws HibernateException {
        query.setMquery(session.getNamedQuery("frawor2.pfpagpar"));
        query.setInteger("p_co_conten", p_co_conten);
        query.setInteger("p_co_pagina", p_co_pagina);
        query.setShort("p_co_pagbot", p_co_pagbot);
        return query.list();
    }

    /**
     *
     * @param p_co_conten
     * @param p_co_pagina
     * @param p_id_frawor
     * @param p_co_regist
     * @return
     */
    public List<ComboDto> getPagcom(long p_id_frawor, int p_co_conten, int p_co_pagina, short p_co_regist) throws HibernateException {
        query.setMquery(session.getNamedQuery("frawor2.pfcompag"));
        query.setInteger("p_co_pagina", p_co_pagina);
        query.setLong("p_id_frawor", p_id_frawor);
        query.setInteger("p_co_conten", p_co_conten);
        query.setShort("p_co_regist", p_co_regist);
        return query.list();
    }

    @Override
    public void CLOSE_SESSION() {
        close = true;
        session.close();
        session = null;
        query = null;
        Escritor.escribe_debug("[" + idDAO + "] PageDAO-> cerrado.");
    }

    //---------------------------------------------------------------------------------------------------------------------------
    /**
     *
     * @param p_co_conten int
     * @param p_co_pagina int
     * @param p_id_frawor int
     * @return
     */
    public Valpagg getValpagg(int p_co_conten, int p_co_pagina, int p_id_frawor) {
        query.setMquery(session.getNamedQuery("frawor2.pfvalpagg"));
        query.setInteger("p_co_pagina", p_co_pagina);
        query.setInteger("p_co_conten", p_co_conten);
        query.setInteger("p_id_frawor", p_id_frawor);
        return (Valpagg) query.uniqueResult();
    }

    /**
     *
     */
    public List<ConcapDto> getConcap(int p_co_congeo) {
        query.setMquery(session.getNamedQuery("frawor2.pgconcap"));
        query.setInteger("p_co_congeo", p_co_congeo);
        return query.list();
    }

    /**
     * GET_ENTGEO
     *
     * @param p_co_congeo
     * @param p_co_concap
     */
    public List<EntgeoDto> getEngeo(int p_co_congeo, short p_co_concap) {
        query.setMquery(session.getNamedQuery("frawor2.pgentgeo"));
        query.setInteger("p_co_congeo", p_co_congeo);
        query.setShort("p_co_concap", p_co_concap);
        return query.list();
    }

    /**
     * GET_ENTGEO
     *
     * @param p_co_entgeo
     * @param p_id_frawor
     * @param p_co_congeo
     * @return
     */
    public List<ValentDto> getValent(int p_co_entgeo, int p_id_frawor, int p_co_congeo) {
        query.setMquery(session.getNamedQuery("frawor2.pgvalent"));
        query.setInteger("p_co_entgeo", p_co_entgeo);
        query.setInteger("p_id_frawor", p_id_frawor);
        query.setInteger("p_co_congeo", p_co_congeo);
        return query.list();
    }

    /**
     * getLatLng
     *
     * @param id_pungeo
     * @return
     */
    public PbpungeoDTO getLatLng(int id_pungeo) throws HibernateException {
        query.setMquery(session.createQuery("from PbpungeoDTO where id_pungeo = " + id_pungeo));
        return (PbpungeoDTO) query.uniqueResult();
    }

    @Override
    public long getIdDAO() {
        return idDAO;
    }

    @Override
    public long getTimelife() {
        return time;
    }

    @Override
    public boolean isClosed() {
        return close;
    }
}
